/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.db.explorer.actions;
import java.util.*;
import java.sql.*;
import org.netbeans.lib.ddl.*;
import org.netbeans.lib.ddl.impl.*;
import org.openide.*;
import org.openide.nodes.*;
import org.netbeans.modules.db.explorer.*;
import org.netbeans.modules.db.explorer.dlg.*;
import org.netbeans.modules.db.explorer.nodes.*;
import org.netbeans.modules.db.explorer.infos.*;
public class AddToIndexAction extends DatabaseAction
{
static final long serialVersionUID =-1416260930649261633L;
public void performAction (Node[] activatedNodes)
{
Node node;
if (activatedNodes != null && activatedNodes.length>0) node = activatedNodes[0];
else return;
try {
DatabaseNodeInfo info = (DatabaseNodeInfo)node.getCookie(DatabaseNodeInfo.class);
DatabaseNodeInfo nfo = info.getParent(nodename);
String catalog = (String)nfo.get(DatabaseNode.CATALOG);
String tablename = (String)nfo.get(DatabaseNode.TABLE);
String columnname = (String)nfo.get(DatabaseNode.COLUMN);
Connection con = nfo.getConnection();
DatabaseMetaData dmd = info.getSpecification().getMetaData();
Specification spec = (Specification)nfo.getSpecification();
DriverSpecification drvSpec = info.getDriverSpecification();
String index = (String)nfo.get(DatabaseNode.INDEX);
// List columns used in current index (do not show)
HashSet ixrm = new HashSet();
drvSpec.getIndexInfo(catalog, dmd, tablename, true, false);
while (drvSpec.rs.next()) {
String ixname = drvSpec.rs.getString("INDEX_NAME");
if (ixname != null) {
String colname = drvSpec.rs.getString("COLUMN_NAME");
if (ixname.equals(index)) ixrm.add(colname);
}
}
drvSpec.rs.close();
// List columns not present in current index
Vector cols = new Vector(5);
drvSpec.getColumns(catalog, dmd, tablename, null);
while (drvSpec.rs.next()) {
String colname = drvSpec.rs.getString("COLUMN_NAME");
if (!ixrm.contains(colname)) cols.add(colname);
}
drvSpec.rs.close();
if (cols.size() == 0) throw new Exception("no usable column in place");
// Create and execute command
LabeledComboDialog dlg = new LabeledComboDialog("Add to index", "Column:", cols);
if (dlg.run()) {
CreateIndex icmd = spec.createCommandCreateIndex(tablename);
icmd.setIndexName(index);
Iterator enu = ixrm.iterator();
while (enu.hasNext()) {
icmd.specifyColumn((String)enu.next());
}
icmd.specifyColumn((String)dlg.getSelectedItem());
spec.createCommandDropIndex(index).execute();
icmd.execute();
nfo.refreshChildren();
// ((DatabaseNodeChildren)nfo.getNode().getChildren()).createSubnode(info,true);
}
} catch(Exception e) {
TopManager.getDefault().notify(new NotifyDescriptor.Message("Unable to perform operation "+node.getName()+", "+e.getMessage(), NotifyDescriptor.ERROR_MESSAGE));
}
}
}
/*
* <<Log>>
* 12 Gandalf 1.11 3/3/00 Radko Najman
* 11 Gandalf 1.10 2/16/00 Radko Najman driver adaptor
* 10 Gandalf 1.9 11/27/99 Patrik Knakal
* 9 Gandalf 1.8 11/15/99 Radko Najman MS ACCESS
* 8 Gandalf 1.7 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 7 Gandalf 1.6 10/8/99 Radko Najman getUser() method
* replaced by dmd.getUserName()
* 6 Gandalf 1.5 9/13/99 Slavek Psenicka
* 5 Gandalf 1.4 9/8/99 Slavek Psenicka adaptor changes
* 4 Gandalf 1.3 7/21/99 Slavek Psenicka new version
* 3 Gandalf 1.2 6/9/99 Ian Formanek ---- Package Change To
* org.openide ----
* 2 Gandalf 1.1 5/21/99 Slavek Psenicka new version
* 1 Gandalf 1.0 5/14/99 Slavek Psenicka
* $
*/